/**
 * KolekcjaIntegerow.h
 *
 * Version: $Id: KolekcjaIntegerow.h 75 2012-01-02 16:07:53Z s8376@pjwstk.edu.pl $
 */

#ifndef KOLEKCJAINTEGEROW_H_
#define KOLEKCJAINTEGEROW_H_

#include <iostream>
#include "Integer.h"

using namespace std;

class KolekcjaIntegerow
{
    private:
        /**
         * Wskaźnik na tablicę wskaźników
         */
        Integer **m_collection;
        int m_collectionSize;
    public:
        KolekcjaIntegerow(int size = 10) :
            m_collectionSize(size)
        {
            m_collection = new Integer*[size];
        }
        KolekcjaIntegerow(KolekcjaIntegerow&);
        ~KolekcjaIntegerow();

        /**
         * dodawania nowych obiektów na koniec
         */
        KolekcjaIntegerow& operator+(int);
        /**
         * usuwania obiektów z i-tej pozycji
         */
        KolekcjaIntegerow& operator[](int);
        /**
         * wyświetlania wszystkich obiektów
         */
        friend ostream& operator<<(ostream&, const KolekcjaIntegerow&);
        /**
         * zwiększenie wartości wszystkich liczb o 1 i dopisanie 1-ki do opisu
         */
        KolekcjaIntegerow& operator++();
        KolekcjaIntegerow& operator++(int dummy);
        /**
         * przypisania jednej kolekcji pod drugą
         */
        KolekcjaIntegerow& operator=(const KolekcjaIntegerow&);
        /**
         * scalenie dwóch kolekcji i wyprodukowanie trzeciej zawierającą kopię wszystkich elementów
         */
        KolekcjaIntegerow operator%(KolekcjaIntegerow&);
};

#endif /* KOLEKCJAINTEGEROW_H_ */
